package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.entity.Merchant;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 商家数据访问层
 */
@Mapper
public interface MerchantMapper {

    /**
     * 查询所有商家
     *
     * @return 商家列表
     */
    List<Merchant> selectAll();

    /**
     * 根据条件分页查询商家
     *
     * @param name   商家名称（可选）
     * @param status 状态（可选）
     * @param offset 起始位置
     * @param limit  查询数量
     * @return 商家列表
     */
    List<Merchant> selectByPage(@Param("name") String name,
                                @Param("status") Integer status,
                                @Param("offset") int offset,
                                @Param("limit") int limit);

    /**
     * 根据条件查询商家总数
     *
     * @param name   商家名称（可选）
     * @param status 状态（可选）
     * @return 商家总数
     */
    long countByCondition(@Param("name") String name, @Param("status") Integer status);

    /**
     * 根据ID查询商家
     *
     * @param id 商家ID
     * @return 商家对象
     */
    Merchant selectById(Long id);

    /**
     * 根据用户名查询商家
     *
     * @param username 用户名
     * @return 商家对象
     */
    Merchant selectByUsername(String username);

    /**
     * 根据手机号查询商家
     *
     * @param phone 手机号
     * @return 商家对象
     */
    Merchant selectByPhone(String phone);

    /**
     * 插入商家
     *
     * @param merchant 商家对象
     * @return 影响行数
     */
    int insert(Merchant merchant);

    /**
     * 更新商家
     *
     * @param merchant 商家对象
     * @return 影响行数
     */
    int update(Merchant merchant);

    /**
     * 更新商家密码
     *
     * @param id         商家ID
     * @param password   新密码
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updatePassword(@Param("id") Long id,
                       @Param("password") String password,
                       @Param("updateTime") Date updateTime);

    /**
     * 更新商家状态
     *
     * @param id         商家ID
     * @param status     状态
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updateStatus(@Param("id") Long id,
                     @Param("status") Integer status,
                     @Param("updateTime") Date updateTime);

    /**
     * 删除商家
     *
     * @param id 商家ID
     * @return 影响行数
     */
    int deleteById(Long id);
}
